const db = uniCloud.database();
const userTable = db.collection("uni-id-users")
const $ = db.command
const nowTime = new Date().getTime()

/**
 * 设置学习分 分配提成比例
 * @param {Object}  param0
 * @param {string} param0.id  支付人的用户ID
 * @param {int} param0.price 支付价格
 * @param {string} param0.orderid 支付的订单编号
**/
async function setNewBookProfit({id,price,orderid}){
	console.log("setNewBookProfit=========>>>>>>>log",id,price,orderid);
	try{
		let res = await userTable.doc(id).field({
			inviter_uid: true
		}).get() //查找用户的推荐人
		let ids = res.data[0].inviter_uid || [] //获取用户推荐人的数组
		//没有直接推荐人
		if(ids.length == 0){
			return true
		}
		let level = await getUserLevel(ids[0]) //查询直接推介人的身份等级
		
		let profitObj = {
			uid: id, //利益来源方
			create_time: nowTime, //分配时间
			orderid,//订单Id
			type:1
		}
		let addArr = []
		
		
		// 服务奖级差  100 200 300
		let arr = [{
			_id:ids[0],
			newLevel:level,
		}]
		
		let arrUsers = await getUsersInfo(ids[0],level,arr) //查询所有等级数组
		for (var i = 0; i < arrUsers.length; i++) {
			let pPrice = 0 
			let newLevel = arrUsers[i].newLevel || 0
			if(level == 0){//如果直接推荐人是普通身份，前面少算了一个拿管理奖的，后面加上,
				let pPrice = 0.1 * (newLevel - i +1) * price
			}else{
				let pPrice = 0.1 * (newLevel - i) * price
			}
			if(newLevel>0){ //不是普通身份，直接发放奖励
				addArr.push(Object.assign({}, profitObj, {
					pid: arrUsers[i]._id, //利益分配方
					price: pPrice, //分配利益金额
					commit: "奖励-学习分", //分配说明
				}))
			}
			
		}
		return await setOrder(addArr)
		
	}catch(e){
		console.log("setNewBookProfit.catch====>",e);
	}
	
}

/**
 * 递归查询上级推荐人的身份及信息
 * @@param {string}  id 身份ID
 * @@param {Number}  level 身份等级 
 * @param {Array}  身份数组，初始数组是传递过来的用户本身
 * @@return {Array} 包含各个等级用户身份的ID
**/
async function getUsersInfo(id,level,arr){
	if(level>=4){ //如果用户的身份已经是天使，直接返回
		return arr
	}
	try{
		let userInfo = await db.collection('uni-id-users').doc(id).field({
			newLevel:true,
			inviter_uid: true,
			_id:true
		})
		let dataIds = userInfo.data[0].inviter_uid || []
		let newLevel = userInfo.data[0].newLevel || 0
		if(newLevel > level){//如果查到更高等级，返回更高等级信息
			arr.push(userInfo.data[0])
		}
		
		if(dataIds.length == 0){//没有推荐人，直接返回
			return arr
		}
		await getUsersInfo(dataIds[0],newLevel,arr) //没有查到更高等级，并且又存在推荐人，继续查找
	}catch(e){
		console.log("getUsersInfo.catch=====>", e);
	}
}


/**
 * 设置分润记录，与增加分润金额
 * @param {Array} data = [value] 
**/
async function setOrder(data) {
	try{
		console.log("setOrder==========",data)
		if(data.length == 0){
			return true
		}
		for(let i=0;i<data.length;i++){
			// console.log("i+++++",i)//更新用户学习分
			await db.collection('uni-id-users').doc(data[i].pid).update({
				sign_score:$.inc(data[i].price),
			})
		}
		console.log("dataOrder++", data)
		return await db.collection("wolf-profit-order").add(data)
	}catch(e){
		console.log("setOrder.catch=====>",e);
	}
}


/**
 * 获取用户的身份
 * @param {string} id = [value] 用户的ID
 * @@return {int} 返回用户身份层级 1，使者，2大使，3天使，4联合创始人 
**/
async function getUserLevel(id){
	try{
		let res = userTable.doc(id).field({
			newLevel:true
		}).get()
		return res.data[0].newLevel || 0
		
	}catch(e){
		console.log("setNewBookProfit.getUserLevel.catch====>>>",e);
	}
}


module.exports={
	setNewBookProfit
}